package com.wyj.config;

import org.springframework.context.annotation.Primary;

import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
import java.lang.reflect.Constructor;
import java.util.Set;

/**
 * TODO: 是servlet3.0规范中引入的接口，能够让web应用程序在servlet容器启动后做一些自定义的操作
 *  servletcontainerinitializer (SCIs)是通过META-INF/services/javax.servlet文件中的一个条目注册的。
 *  必须包含在包含SCI实现的JAR文件中的ServletContainerInitializer。
 *  不管元数据的设置如何，都要执行SCI处理。SCI处理可以通过片段排序来控制每个JAR文件。如果定义了绝对排序，那么将只处理包含在排序中的那些jar。要完全禁用SCI处理，可以定义一个空的绝对排序。
 *  sca通过添加到类中的javax.servlet.annotation.handlestype注释注册注释(类、方法或字段)和/或类型。
 *
 * @author wuyijie
 * @date 2021/12/4 16:08
 */
// @HandlesTypes(MyWebApplicationInitializer.class)
public class MySpringServletContainerInitializer implements ServletContainerInitializer {
    @Override

    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        System.out.println("================================");

        // for (Class<?> clazz : c) {
        //     if(!clazz.isInterface()){
        //         try {
        //             System.out.println(clazz);
        //         } catch (Exception e) {
        //             e.printStackTrace();
        //         }
        //     }
        // }

        // MyWebApplicationInitializer myWebApplicationInitializer = new MyWebApplicationInitializer();
        // myWebApplicationInitializer.onStartup(ctx);
        // for (Class<?> clazz : c) {
        //     if(!clazz.isInterface()){
        //         try {
        //             System.out.println(clazz);
        //             Constructor<?> constructor = clazz.getConstructor();
        //             Object instance = constructor.newInstance();
        //             MyWebApplicationInitializer containerInitalizer = (MyWebApplicationInitializer)instance;
        //             containerInitalizer.onStartup(ctx);
        //         } catch (Exception e) {
        //             e.printStackTrace();
        //         }
        //     }
        // }
    }
}
